﻿//#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//
//void test1() {
//	int i = 0;
//	i++;
//	printf("%d ", i);
//	
//}
//
//void test2() {
//	static int i = 0;
//	i++;
//	printf("%d ", i);
//}
//
//int main() {
//	int i = 0;
//	for (i = 1; i <= 5; i++) {
//		test1();
//	}
//
//	printf("\n");
//
//	for (i = 1; i <= 5; i++) {
//		test2();
//	}
//	/*
//	1 1 1 1 1
//	1 2 3 4 5
//	为什么？
//	因为static影响了i的生命周期
//	在test1中，一次for循环结束，i就会被销毁，就需要重新定义
//	在test2中，有了static，i的生命周期变长，整个程序结束他才会被销毁，所以它就会出现累加
//
//	static修饰局部变量改变了变量的⽣命周期，⽣命周期改变的本质是改变了变量的存储类型，本
//	来⼀个局部变量是存储在内存的栈区的，但是被 static 修饰后存储到了静态区。存储在静态区的变
//	量和全局变量是⼀样的，⽣命周期就和程序的⽣命周期⼀样了，只有程序结束，变量才销毁，内存才
//	回收。但是作⽤域不变的。
//
//	此外，如果在add.c文件中定义了一个全局变量A，想要在test.c文件中使用这个全局变量A的话，
//	只需在程序开头用extern声明一下即可使用。但是若在add.c中定义A时还用了static修饰，那A
//	就只能用在add.c中，其他文件用不了。因为static把它的外部链接属性变成了内部链接属性
//
//	static修饰函数和修饰全局变量类似，更多内容看第6讲
//	*/
//	return 0;
//}